package com.kexio.dynamic.config.service;

/**
 * 配置变更监听器接口
 * 
 * 当配置发生变更时，会通知所有注册的监听器
 * 
 * @author Kexio
 * @since 1.0.0
 */
@FunctionalInterface
public interface ConfigChangeListener {

    /**
     * 配置变更回调
     * 
     * @param key      配置键
     * @param oldValue 旧值
     * @param newValue 新值
     */
    void onConfigChange(String key, String oldValue, String newValue);

    /**
     * 获取监听器名称
     * 
     * @return 监听器名称
     */
    default String getListenerName() {
        return this.getClass().getSimpleName();
    }

    /**
     * 是否异步执行
     * 
     * @return true-异步执行, false-同步执行
     */
    default boolean isAsync() {
        return false;
    }
}
